import java.math.BigInteger;
import java.util.HashSet;
import java.util.Set;

//029. 独特的幂
//        对于 2≤a≤5 和 2≤b≤5，考虑所有的整数 a 和 b 的组合 a^b 如下：
//        如果把上面的结果按照数字顺序从小到大排列并去掉所有重复的数字，我们可以得到以下有
//        15 个不同数字的序列：
//        4,8,9,16,25,27,32,64,81,125,243,256,625,1024,3125
//        求对于 2≤a≤100 和 2≤b≤100
//        a^b会产生的序列中的有多少个不同的数字？
//        答案：9183

// 感觉可以根据幂的分解来优化
public class Week029 {
    static final int startA = 2, startB = 2, endA = 100, endB = 100;

    static void run() {
        Set<BigInteger> set = new HashSet<>();
        for (int i = startA; i <= endA; ++i) {
            for (int j = startB; j <= endB; ++j) {
                set.add(BigInteger.valueOf(i).pow(j));
            }
        }
        System.out.println(set.size());
//        int ans = (endA - startA + 1) * (endB - startB + 1);
//        System.out.println(ans);
    }

    public static void main(String[] args) {
        long startTime = System.nanoTime();
        run();
        System.out.println("\n程序运行时间：" + (System.nanoTime() - startTime) + "ns.");
    }
}
